package com.bdqn.spark.chapter05.action

import org.apache.spark.{SparkConf, SparkContext}

// 一个main方法，叫一个application（app）
object Spark01_RDD_Operator_Action {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
      .setMaster("local[*]")
      .setAppName("action-reduce")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.makeRDD(List(1, 2, 3, 4))

    // 行动算子
    // 所谓的行动算子，其实就是触发作业(Job)执行的方法
    // 底层代码调用的是环境对象的runJob方法
    // 底层代码中会创建ActiveJob，并提交执行。

    // reduce
    // 所有算子中，所传递的 函数 对象，都在 Executor 中执行
    // 在 main 方法中，定义的变量，都在 Driver 中执行
    val i: Int = rdd.reduce(_ + _) // 只要是一个行动算子，就是一个job
    println(i)

    sc.stop()
  }
}
